Custom Filtering Logic যোগ করা

Web Development - জ্যাঙ্গো (Django) - Django Pagination এবং Filtering
349

Django তে Custom Filtering Logic ব্যবহার করা হয় যখন আপনি ডাটাবেস থেকে নির্দিষ্ট ধরনের ডেটা নির্বাচন করতে চান যা Django এর সাধারণ QuerySet ফিল্টারিংয়ের বাইরে। Django এর ORM (Object-Relational Mapping) এর মাধ্যমে আপনি সাধারণভাবে ফিল্টার করতে পারেন, তবে অনেক সময় আপনার নিজস্ব লজিক প্রয়োগ করার প্রয়োজন হতে পারে। এই ক্ষেত্রে, আপনি custom filters তৈরি করতে পারেন যেগুলো ডাটাবেসের query প্রসেসে ব্যবহার হবে।


Custom Filter কীভাবে কাজ করে?

Django তে custom filtering সাধারণত QuerySet API এর মাধ্যমে করা হয়, যেখানে আপনি নিজের কাস্টম লজিক প্রয়োগ করতে পারেন। উদাহরণস্বরূপ, যদি আপনার একটি মডেল থাকে এবং আপনি চান যে নির্দিষ্ট ধরনের ডেটা বের করার জন্য আপনি কিছু কাস্টম লজিক প্রয়োগ করবেন, তবে Django তে manager অথবা custom queryset methods ব্যবহার করতে পারেন।

এখানে একটি বিস্তারিত উদাহরণ দেওয়া হলো, যেখানে custom filtering logic যোগ করা হচ্ছে:


১. Custom Manager তৈরি করা

প্রথমত, আপনি custom manager ব্যবহার করতে পারেন, যা আপনাকে একাধিক custom queryset methods তৈরি করতে সাহায্য করবে।

উদাহরণ: Product মডেল এবং Custom Manager

# models.py
from django.db import models

class ProductManager(models.Manager):
    def available(self):
        return self.filter(available=True)
    
    def by_category(self, category_name):
        return self.filter(category__name=category_name)

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    available = models.BooleanField(default=True)
    category = models.ForeignKey('Category', on_delete=models.CASCADE)

    objects = ProductManager()  # Custom Manager অ্যাসাইন করা

    def __str__(self):
        return self.name

এখানে, ProductManager একটি custom manager তৈরি করেছে, যার দুটি মেথড রয়েছে:

  • available(): যা কেবলমাত্র উপলব্ধ পণ্য (available=True) ফেরত দেয়।
  • by_category(): যা একটি নির্দিষ্ট category এর পণ্য ফিরিয়ে দেয়।

২. Custom QuerySet Method তৈরি করা

আপনি চাইলে custom queryset method এর মাধ্যমে আরও কাস্টম লজিক তৈরি করতে পারেন। নিচে এর উদাহরণ দেওয়া হলো:

# models.py
from django.db import models

class ProductQuerySet(models.QuerySet):
    def available(self):
        return self.filter(available=True)
    
    def by_category(self, category_name):
        return self.filter(category__name=category_name)

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    available = models.BooleanField(default=True)
    category = models.ForeignKey('Category', on_delete=models.CASCADE)

    objects = ProductQuerySet.as_manager()  # Custom QuerySet অ্যাসাইন করা

    def __str__(self):
        return self.name

এখানে, ProductQuerySet হল একটি কাস্টম QuerySet, যেখানে আপনার কাস্টম মেথডগুলো থাকবে (যেমন available() এবং by_category())। as_manager() মেথডটি ব্যবহৃত হয়েছে যাতে এই কাস্টম queryset মেথডগুলো Product মডেলটির জন্য ব্যবহৃত হয়।


৩. Views এ Custom Filtering Logic ব্যবহার করা

আপনি যখন views এ গিয়ে এই কাস্টম ফিল্টার ব্যবহার করতে চান, তখন সরাসরি objects ম্যানেজার বা কাস্টম queryset মেথড ব্যবহার করতে পারেন।

উদাহরণ: Views এ Custom Filter ব্যবহার করা

# views.py
from django.shortcuts import render
from .models import Product

def product_list(request):
    # Example of using custom filter by category
    products = Product.objects.by_category('Electronics')
    
    return render(request, 'product_list.html', {'products': products})

এখানে, Product.objects.by_category('Electronics') এর মাধ্যমে আপনি কাস্টম ফিল্টার ব্যবহার করে "Electronics" ক্যাটাগরির পণ্যগুলো ফিল্টার করে এনেছেন।


৪. ফর্মের মাধ্যমে Custom Filtering

আপনি চাইলে ইউজারের ইনপুটের মাধ্যমে কাস্টম ফিল্টার তৈরি করতে পারেন। উদাহরণস্বরূপ, একটি ফর্ম ব্যবহার করে নির্দিষ্ট ক্যাটাগরি বা মূল্য পরিসীমার মধ্যে পণ্য ফিল্টার করতে পারবেন।

উদাহরণ: ফর্মের মাধ্যমে Custom Filter

# forms.py
from django import forms

class ProductFilterForm(forms.Form):
    category = forms.CharField(max_length=100, required=False)
    price_min = forms.DecimalField(min_value=0, required=False)
    price_max = forms.DecimalField(min_value=0, required=False)

এখন, এই ফর্মটির মাধ্যমে ফিল্টার করা যাবে:

# views.py
from django.shortcuts import render
from .models import Product
from .forms import ProductFilterForm

def product_list(request):
    form = ProductFilterForm(request.GET)
    products = Product.objects.all()

    if form.is_valid():
        category = form.cleaned_data.get('category')
        price_min = form.cleaned_data.get('price_min')
        price_max = form.cleaned_data.get('price_max')

        if category:
            products = products.by_category(category)
        if price_min:
            products = products.filter(price__gte=price_min)
        if price_max:
            products = products.filter(price__lte=price_max)

    return render(request, 'product_list.html', {'products': products, 'form': form})

এখানে:

  • ফর্মের মাধ্যমে ইউজার ক্যাটাগরি এবং মূল্য পরিসীমা নির্দিষ্ট করতে পারবেন।
  • ফর্মটি সাবমিট করার পর, Product মডেলটি কাস্টম ফিল্টার (যেমন by_category(), price__gte, price__lte) প্রয়োগ করবে।

৫. Django Filters লাইব্রেরি ব্যবহার

Django তে custom filtering লজিক সহজে ব্যবহার করার জন্য django-filter লাইব্রেরি ব্যবহার করা যেতে পারে। এটি আপনাকে ফিল্টারিং লজিক কাস্টমাইজ করতে এবং পরিষ্কারভাবে সাজাতে সাহায্য করে।

উদাহরণ: Django Filters লাইব্রেরি ব্যবহার

প্রথমে, django-filter লাইব্রেরি ইনস্টল করতে হবে:

pip install django-filter

এরপর, আপনি FilterSet তৈরি করতে পারেন:

# filters.py
import django_filters
from .models import Product

class ProductFilter(django_filters.FilterSet):
    category = django_filters.CharFilter(field_name='category__name', lookup_expr='icontains')
    price_min = django_filters.NumberFilter(field_name='price', lookup_expr='gte')
    price_max = django_filters.NumberFilter(field_name='price', lookup_expr='lte')

    class Meta:
        model = Product
        fields = ['category', 'price_min', 'price_max']

এখন, আপনি views.py তে এই ফিল্টারটি ব্যবহার করতে পারেন:

# views.py
from django.shortcuts import render
from .models import Product
from .filters import ProductFilter

def product_list(request):
    product_filter = ProductFilter(request.GET, queryset=Product.objects.all())
    return render(request, 'product_list.html', {'filter': product_filter})

এভাবে, Django Filters লাইব্রেরি ব্যবহার করে আপনি আরও সুগম এবং সহজে কাস্টম ফিল্টার লজিক তৈরি করতে পারেন।


সারাংশ

  • Custom filtering Django তে একটি শক্তিশালী উপায় যার মাধ্যমে আপনি ডেটাবেসের query প্রসেসে নিজস্ব লজিক প্রয়োগ করতে পারেন।
  • আপনি custom managers এবং custom queryset methods ব্যবহার করে ফিল্টার তৈরি করতে পারেন।
  • Django তে django-filter লাইব্রেরি ব্যবহার করলে কাস্টম ফিল্টারিং আরও সহজ এবং পরিষ্কারভাবে করা যায়।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...